library(tidyverse)
library(cowplot)
library(maps)
library(ggforce)
library(viridis)
studies <- read_csv("../data/studies_gsheet.csv")
sites <- read_csv("../data/sites_gsheet.csv")
df <- studies %>% 
  group_by(site) %>% 
  summarise(Nstudies = n_distinct(studyID)) %>% 
  left_join(sites)
Joining, by = "site"
world <- map("world", plot = FALSE, fill = TRUE) %>% fortify()
# sanity check that coordinates are in the right country
# within a country, all Xs should be the same color
ggplot(df, aes(x = long, y = lat)) +
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90") +
  geom_point(aes(col = country), size = 5, shape = 4, stroke = 2, alpha = .8) +
  coord_fixed(1.3, ylim = c(-55, 83.59961)) +
  scale_color_viridis_d() +
  theme_map() +
  guides(col = "none")

ggsave("../graphs/map.pdf", width = 20, height = 10, scale = 2)
legend <- get_legend(m)
Removed 2 rows containing missing values (geom_point).

Zoom in on sections

# japan
m1 <- m + 
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
  coord_fixed(1.3, ylim = c(25, 45), xlim = c(125, 145)) +
  theme(legend.position = "none") +
  panel_border(color = "grey", size = .5)

# europe
m2 <- m + 
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
  coord_fixed(1.3, ylim = c(32, 60), xlim = c(-10, 30)) +
  theme(legend.position = "none") +
  panel_border(color = "grey", size = .5)

# contiguous us
usa = map("state", plot = FALSE, fill = TRUE) %>% fortify() # "usa"

m3 <- m + 
  geom_polygon(data = world, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_polygon(data = usa, aes(group = group), col = "black", fill = "grey90", lwd = .2) +
  geom_point(aes(size = Nstudies, fill = Nstudies), shape = 21, alpha = .8) +
  coord_fixed(1.3, ylim = c(25, 49), xlim = c(-127, -67)) +
  theme(legend.position = "none") +
  panel_border(color = "grey", size = .5)
bottom_row <- plot_grid(m3, m2, NA, m1, NA, leg, nrow = 1, rel_widths = c(2, 1.18, .06, .85, .08, .7))
Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Cannot convert object of class logical into a grob.Removed 2 rows containing missing values (geom_point).Removed 2 rows containing missing values (geom_point).Cannot convert object of class logical into a grob.
plot_grid(mx, bottom_row, ncol = 1, rel_heights = c(2.4, 1)) +
  theme(plot.margin = unit(c(.5, .5, 1.5, .5), "cm"))
Removed 2 rows containing missing values (geom_point).


Session Info

sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.5

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] viridis_0.5.1     viridisLite_0.3.0 ggforce_0.3.1     maps_3.3.0        cowplot_1.0.0    
 [6] forcats_0.4.0     stringr_1.4.0     dplyr_0.8.3       purrr_0.3.2       readr_1.3.1      
[11] tidyr_1.0.0       tibble_2.1.3      ggplot2_3.2.1     tidyverse_1.2.1  

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.2         lubridate_1.7.4    lattice_0.20-38    prettyunits_1.0.2  ps_1.3.0          
 [6] assertthat_0.2.1   zeallot_0.1.0      digest_0.6.21      R6_2.4.0           cellranger_1.1.0  
[11] backports_1.1.5    stats4_3.6.1       evaluate_0.14      httr_1.4.1         pillar_1.4.2      
[16] rlang_0.4.0        lazyeval_0.2.2     readxl_1.3.1       rstudioapi_0.10    callr_3.3.2       
[21] rmarkdown_1.16     labeling_0.3       loo_2.1.0          polyclip_1.10-0    munsell_0.5.0     
[26] broom_0.5.2        compiler_3.6.1     modelr_0.1.5       xfun_0.10          rstan_2.19.2      
[31] base64enc_0.1-3    pkgconfig_2.0.3    pkgbuild_1.0.5     htmltools_0.4.0    tidyselect_0.2.5  
[36] gridExtra_2.3      matrixStats_0.55.0 crayon_1.3.4       withr_2.1.2        MASS_7.3-51.4     
[41] grid_3.6.1         nlme_3.1-141       jsonlite_1.6       gtable_0.3.0       lifecycle_0.1.0   
[46] magrittr_1.5       StanHeaders_2.19.0 scales_1.0.0       cli_1.1.0          stringi_1.4.3     
[51] farver_1.1.0       xml2_1.2.2         generics_0.0.2     vctrs_0.2.0        tools_3.6.1       
[56] glue_1.3.1         tweenr_1.0.1       hms_0.5.1          yaml_2.2.0         parallel_3.6.1    
[61] processx_3.4.1     inline_0.3.15      colorspace_1.4-1   rvest_0.3.4        knitr_1.25        
[66] haven_2.1.1       
LS0tCnRpdGxlOiAiU2l0ZXMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY3NzOiBzdHlsZS5jc3MKICAgIHRoZW1lOiBwYXBlcgotLS0KCmBgYHtyIHNldHVwLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeSh2aXJpZGlzKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpzdHVkaWVzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3N0dWRpZXNfZ3NoZWV0LmNzdiIpCnNpdGVzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3NpdGVzX2dzaGVldC5jc3YiKQpgYGAKCmBgYHtyfQpkZiA8LSBzdHVkaWVzICU+JSAKICBncm91cF9ieShzaXRlKSAlPiUgCiAgc3VtbWFyaXNlKE5zdHVkaWVzID0gbl9kaXN0aW5jdChzdHVkeUlEKSkgJT4lIAogIGxlZnRfam9pbihzaXRlcykKYGBgCgpgYGB7cn0Kd29ybGQgPC0gbWFwKCJ3b3JsZCIsIHBsb3QgPSBGQUxTRSwgZmlsbCA9IFRSVUUpICU+JSBmb3J0aWZ5KCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTIwLCBmaWcuaGVpZ2h0PTEwLCBjYWNoZT1UUlVFfQojIHNhbml0eSBjaGVjayB0aGF0IGNvb3JkaW5hdGVzIGFyZSBpbiB0aGUgcmlnaHQgY291bnRyeQojIHdpdGhpbiBhIGNvdW50cnksIGFsbCBYcyBzaG91bGQgYmUgdGhlIHNhbWUgY29sb3IKZ2dwbG90KGRmLCBhZXMoeCA9IGxvbmcsIHkgPSBsYXQpKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKGdyb3VwID0gZ3JvdXApLCBjb2wgPSAiYmxhY2siLCBmaWxsID0gImdyZXk5MCIpICsKICBnZW9tX3BvaW50KGFlcyhjb2wgPSBjb3VudHJ5KSwgc2l6ZSA9IDUsIHNoYXBlID0gNCwgc3Ryb2tlID0gMiwgYWxwaGEgPSAuOCkgKwogIGNvb3JkX2ZpeGVkKDEuMywgeWxpbSA9IGMoLTU1LCA4My41OTk2MSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2QoKSArCiAgdGhlbWVfbWFwKCkgKwogIGd1aWRlcyhjb2wgPSAibm9uZSIpCmBgYAoKYGBge3J9Cmdnc2F2ZSgiLi4vZ3JhcGhzL21hcC5wZGYiLCB3aWR0aCA9IDIwLCBoZWlnaHQgPSAxMCwgc2NhbGUgPSAyKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD00fQptIDwtIGdncGxvdChkZiwgYWVzKHggPSBsb25nLCB5ID0gbGF0KSkgKwogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsIGFlcyhncm91cCA9IGdyb3VwKSwgZmlsbCA9ICJncmV5OTAiKSArCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IE5zdHVkaWVzLCBmaWxsID0gTnN0dWRpZXMpLCBzaGFwZSA9IDIxLCBhbHBoYSA9IC44KSArCiAgdGhlbWVfbWFwKCkgKwogICMgIyB0byBtYWtlIGZpbGwgaW50byBkaXNjcmV0ZTsgb3ZlcmxhcCB3aXRoIHNpemUgbGVnZW5kCiAgIyBzY2FsZV9zaXplX2FyZWEoIk51bWJlciBvZlxuU3R1ZGllcyIsIG1heF9zaXplID0gMTUpICsKICAjIHNjYWxlX2ZpbGxfdmlyaWRpc19jKCJOdW1iZXIgb2ZcblN0dWRpZXMiLCBndWlkZSA9ICJsZWdlbmQiKSArCiAgIyB0byBoYXZlIHRoZW0gc2lkZSBieSBzaWRlCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MoIiIsIGJyZWFrcyA9IGMoMSwgMjAsIDQwLCA2MCkpICsKICBzY2FsZV9zaXplX2FyZWEoIiIsIG1heF9zaXplID0gMTUsIGJyZWFrcyA9IGMoMSwgMjAsIDQwLCA2MCkpICsKICB0aGVtZShsZWdlbmQuYm94ID0gImhvcml6b250YWwiKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvcmJhcihyZXZlcnNlID0gVCwgYmFyaGVpZ2h0ID0gMTAsIG9yZGVyID0gMCksIAogICAgICAgICBzaXplID0gZ3VpZGVfbGVnZW5kKGtleWhlaWdodCA9IDIuNiwgdGl0bGUudGhlbWUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDQpKSkKCmxlZ2VuZCA8LSBnZXRfbGVnZW5kKG0pCiMgcGxvdF9ncmlkKGxlZ2VuZCkKCm14IDwtIG0gKwogIGFubm90YXRlKCJyZWN0IiwgeW1pbiA9IGMoMjQsIDMxLCAyNCksIHltYXggPSBjKDQ2LCA2MiwgNTApLCB4bWluID0gYygxMjQsIC0xMiwgLTEzMCksIAogICAgICAgICAgIHhtYXggPSBjKDE0NiwgMzIsIC02NCksIHNpemUgPSAuNSwgY29sID0gImdyZXkiLCBmaWxsID0gTkEpICsgCiAgY29vcmRfZml4ZWQoMS4zLCB5bGltID0gYygtNTUsIDgzLjU5OTYxKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgojIyBab29tIGluIG9uIHNlY3Rpb25zCgpgYGB7cn0KIyBqYXBhbgptMSA8LSBtICsgCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKGdyb3VwID0gZ3JvdXApLCBjb2wgPSAiYmxhY2siLCBmaWxsID0gImdyZXk5MCIsIGx3ZCA9IC4yKSArCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IE5zdHVkaWVzLCBmaWxsID0gTnN0dWRpZXMpLCBzaGFwZSA9IDIxLCBhbHBoYSA9IC44KSArCiAgY29vcmRfZml4ZWQoMS4zLCB5bGltID0gYygyNSwgNDUpLCB4bGltID0gYygxMjUsIDE0NSkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBwYW5lbF9ib3JkZXIoY29sb3IgPSAiZ3JleSIsIHNpemUgPSAuNSkKCiMgZXVyb3BlCm0yIDwtIG0gKyAKICBnZW9tX3BvbHlnb24oZGF0YSA9IHdvcmxkLCBhZXMoZ3JvdXAgPSBncm91cCksIGNvbCA9ICJibGFjayIsIGZpbGwgPSAiZ3JleTkwIiwgbHdkID0gLjIpICsKICBnZW9tX3BvaW50KGFlcyhzaXplID0gTnN0dWRpZXMsIGZpbGwgPSBOc3R1ZGllcyksIHNoYXBlID0gMjEsIGFscGhhID0gLjgpICsKICBjb29yZF9maXhlZCgxLjMsIHlsaW0gPSBjKDMyLCA2MCksIHhsaW0gPSBjKC0xMCwgMzApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgcGFuZWxfYm9yZGVyKGNvbG9yID0gImdyZXkiLCBzaXplID0gLjUpCgojIGNvbnRpZ3VvdXMgdXMKdXNhID0gbWFwKCJzdGF0ZSIsIHBsb3QgPSBGQUxTRSwgZmlsbCA9IFRSVUUpICU+JSBmb3J0aWZ5KCkgIyAidXNhIgoKbTMgPC0gbSArIAogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsIGFlcyhncm91cCA9IGdyb3VwKSwgY29sID0gImJsYWNrIiwgZmlsbCA9ICJncmV5OTAiLCBsd2QgPSAuMikgKwogIGdlb21fcG9seWdvbihkYXRhID0gdXNhLCBhZXMoZ3JvdXAgPSBncm91cCksIGNvbCA9ICJibGFjayIsIGZpbGwgPSAiZ3JleTkwIiwgbHdkID0gLjIpICsKICBnZW9tX3BvaW50KGFlcyhzaXplID0gTnN0dWRpZXMsIGZpbGwgPSBOc3R1ZGllcyksIHNoYXBlID0gMjEsIGFscGhhID0gLjgpICsKICBjb29yZF9maXhlZCgxLjMsIHlsaW0gPSBjKDI1LCA0OSksIHhsaW0gPSBjKC0xMjcsIC02NykpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBwYW5lbF9ib3JkZXIoY29sb3IgPSAiZ3JleSIsIHNpemUgPSAuNSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9NS41LCBjYWNoZT1UUlVFfQpsZWcgPC0gcGxvdF9ncmlkKE5BLCBsZWdlbmQsIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoLjEsIC45KSwgbGFiZWxzID0gYygiIiwgIk51bWJlciBvZiBTdHVkaWVzIiksIGxhYmVsX3ggPSAtLjM1KQpib3R0b21fcm93IDwtIHBsb3RfZ3JpZChtMywgbTIsIE5BLCBtMSwgTkEsIGxlZywgbnJvdyA9IDEsIHJlbF93aWR0aHMgPSBjKDIsIDEuMTgsIC4wNiwgLjg1LCAuMDgsIC43KSkKcGxvdF9ncmlkKG14LCBib3R0b21fcm93LCBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDIuNCwgMSkpICsKICB0aGVtZShwbG90Lm1hcmdpbiA9IHVuaXQoYyguNSwgLjUsIDEuNSwgLjUpLCAiY20iKSkKYGBgCgpgYGB7cn0KZ2dzYXZlKCIuLi9ncmFwaHMvbWFwX2luc2V0cy5wZGYiLCB3aWR0aCA9IDgsIGhlaWdodCA9IDUuNSwgc2NhbGUgPSAyKQpgYGAKCgoqKioKCiMgU2Vzc2lvbiBJbmZvCgpgYGB7cn0Kc2Vzc2lvbkluZm8oKQpgYGAK